package com.yeban.javase.day13.test;

import java.io.*;

/**
 * @Desc TODO
 * @Author yeban
 * @Date 2025/10/23
 */
public class CopyTest02 {

    public static void main(String[] args) {
        File oldDir = new File("src/com/yeban/javase/day13/demo/aaa");
        File newDir = new File("src/com/yeban/javase/day13/demo/bbb");
        copyFolder(oldDir, newDir);
        System.out.println("复制完成！");
    }

    public static void copyFolder(File oldDir, File newDir) {
        // 判断待文件是否存在且是目录
        if(!oldDir.exists() || !oldDir.isDirectory()) {
            System.out.println("源文件夹不存在或不是目录！");
            return;
        }
        // 要复制的文件夹是否存在
        if(!newDir.exists()) {
            boolean isCreated = newDir.mkdirs();
            if(!isCreated) {
                System.out.println("目标文件夹创建失败！");
                return;
            }
        }
        // 获取文件夹下的所有文件/文件夹
        File[] files = oldDir.listFiles();
        if(files == null || files.length<=0) {
            System.out.println("文件夹下没有内容！");
            return;
        }
        // 遍历所有文件内容并进行操作
        for(File file : files) {
            // 构建对应文件路径
            File newFile = new File(newDir, file.getName());
            // 如果是文件夹
            if(file.isDirectory()) {
                copyFolder(file, newFile);
            } else {
                copyFile(file, newFile);
            }
        }
    }

    public static void copyFile(File oldFile, File newFile) {
        // 声明输出流
        try(
                FileInputStream fis = new FileInputStream(oldFile);
                FileOutputStream fos = new FileOutputStream(newFile);
        ) {
            // 创建个桶
            byte[] bytes = new byte[1024];
            int len = 0;

            while((len = fis.read(bytes)) != -1) {
                fos.write(bytes, 0, len);
            }
            fos.flush();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}
